import com.alibaba.alimonitor.jmonitor.utils.StringUtils
import com.alibaba.moco.RedisPoolInstance
import com.alibaba.moco.util.BaseTypeUtil
import groovy.json.JsonOutput
import groovy.json.JsonSlurper
import redis.clients.jedis.Jedis
import script.GlobalValues
import script.moco.dto.ModifyFeeRequest
import script.moco.dto.ModifyFeeResponse
import script.moco.dto.OrderInfo
import script.v1.didiCallback.NoticeCallback
import script.v1.didiCallback.NotifyRequest
//模拟客服改价
def excute(data) {

    Jedis redis = RedisPoolInstance.getRedisClient();
    def params = data.getParameterMap();
    def request = BaseTypeUtil.mapToBean(params, ModifyFeeRequest.class) as ModifyFeeRequest;//请求数据转换为对象

    def response = new ModifyFeeResponse(); //定义响应对象

    def jsonStr = redis.get(GlobalValues.KEY_ORDER + request.getOrderId());//从 Redis中获取 json 订单字符串
    if (jsonStr == null) {    //验证订单是否存在
        response.setSuccess("false");
        response.setErrorMsg("订单id不存在 !");
        response.setErrorCode(39001);
        response.setErrorLevel(1);

        return response;
    }

    def slurper = new JsonSlurper();
    def detailMap = slurper.parseText(jsonStr);    //从json字符串变成json对象

    if (!detailMap.containsKey("order")) {
        response.setSuccess("false");
        response.setErrorMsg("订单不存在 !");
        response.setErrorCode(39001);
        response.setErrorLevel(1);

        return response;
    }

    if (request.getPrice() == null) {    //验证订单是否存在
        response.setSuccess("false");
        response.setErrorMsg("参数错误 !");
        response.setErrorCode(10003);
        response.setErrorLevel(1);
        response.setContent("改价价格");

        return response;
    }

    def jsonMap = detailMap.get("order");
    def taxiObj = BaseTypeUtil.jsonToBean(jsonMap, OrderInfo.class) as OrderInfo;//将json对象转换为OrderInfo对象

    //客服改价完善数据
    System.out.println("原来价格：" + String.valueOf(detailMap.price.total_price))
    System.out.println("改价价格：" + String.valueOf(request.getPrice()))
    detailMap.price.total_price = request.getPrice()

    //detailMap.put("order", taxiObj)
    redis.set(GlobalValues.KEY_ORDER + taxiObj.getId(), JsonOutput.toJson(detailMap).toString())    //直接覆盖原有数据，进行修改

    //客服改价完成后进行回调
    //通知回调
    NoticeCallback noticeCallbackTool = new NoticeCallback();
    NotifyRequest notifyRequest = new NotifyRequest();
    notifyRequest.setOrderId(taxiObj.getId());
    notifyRequest.setNotifyType(5);
    notifyRequest.setNotifyDesc("订单改价通知：客服对未支付订单更改价格后，通知接入方调用订单详情获取最新价格");
    String url = noticeCallbackTool.getCallbackUrlFromRequest(data)
    if (StringUtils.isNotBlank(url)){
        response.setSuccess("true");
        response.setErrorMsg(null);
        response.setErrorCode(0);
        response.setErrorLevel(0);
        response.setContent(noticeCallbackTool.handNotify(url, notifyRequest));
    } else {
        response.setSuccess("false");
        response.setErrorMsg("session 中不存在callback地址");
        response.setErrorCode(-1);
        response.setErrorLevel(0);
    }
   /* def callbackObj = new CallbackRequest();
    callbackObj.setClientId("1");
    callbackObj.setOrderId(taxiObj.getId());
    callbackObj.setNotifyType(5);
    callbackObj.setNotifyDesc("订单改价通知：客服对未支付订单更改价格后，通知接入方调用订单详情获取最新价格");
    callbackObj.setTimestamp(System.currentTimeMillis());
    callbackObj.setSign("123");

    HttpClientUtil.post(callbackObj);

    response.setSuccess("true");
    response.setErrorMsg(null);
    response.setErrorCode(0);
    response.setErrorLevel(0);
    response.setContent(null);*/

    return response;
}